package com.damai.servicelock.annotation;

import com.damai.servicelock.LockType;
import com.damai.servicelock.info.LockTimeOutStrategy;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

//ElementType.TYPE:表示该注解可以应用到类、接口、枚举、注解类型等上
@Target(value = {ElementType.TYPE, ElementType.METHOD})
@Retention(value= RetentionPolicy.RUNTIME)
public @interface ServiceLock {
    /**
     * 锁的类型(默认 可重入锁)
     */
    LockType lockType() default LockType.Reentrant;
    /**
     * 业务名称
     */
    String name() default "";
    /**
     * 自定义业务key
     */
    String [] keys();
    /**
     * 尝试加锁失败最多等待时间
     */
    long waitTime() default 10;
    /**
     * 时间单位
     */
    TimeUnit timeUnit() default TimeUnit.SECONDS;
    /**
     * 加锁超时的处理策略
     */
    LockTimeOutStrategy lockTimeOutStrategy() default LockTimeOutStrategy.FAIL;
    /**
     * 自定义加锁超时的处理策略
     */
    String customLockTimeOutStrategy() default "";

}
